<%@page import="java.util.List"%>
<%@page import="coba.service.ProvinciaLocalServiceUtil"%>
<%@page import="coba.service.InstitucionLocalServiceUtil"%>
<%@page import="coba.service.ItinerarioLocalServiceUtil"%>
<%@page import="coba.service.ItinerarioRecorridoLocalServiceUtil"%>
<%@page import="coba.service.RecorridoLocalServiceUtil"%>
<%@page import="coba.service.ConcurrenciaRecorridoLocalServiceUtil"%>
<%@page import="coba.service.SolicitudLocalServiceUtil"%>
<%@page import="coba.service.ContactoLocalServiceUtil"%>
<%@page import="coba.service.RecorridoSolicitudLocalServiceUtil"%>
<%@page import="coba.service.GuiaLocalServiceUtil"%>
<%@page import="coba.service.LicenciaGuiaLocalServiceUtil"%>
<%@page import="coba.model.Provincia"%>
<%@page import="coba.model.Institucion"%>
<%@page import="coba.model.Contacto"%>
<%@page import="coba.model.Itinerario"%>
<%@page import="coba.model.ItinerarioRecorrido"%>
<%@page import="coba.model.Recorrido"%>
<%@page import="coba.model.ConcurrenciaRecorrido"%>
<%@page import="coba.model.Solicitud"%>
<%@page import="coba.model.Guia"%>
<%@page import="coba.model.LicenciaGuia"%>
<%@page import="coba.json.ItinerarioJson"%>
<%@page import="coba.json.ItinerarioRecorridoJson"%>
<%@page import="coba.json.RecorridoJson"%>
<%@page import="coba.json.ConcurrenciaRecorridoJson"%>
<%@page import="coba.json.GuiaJson"%>
<%@page import="coba.json.SolicitudJson"%>
<%@page import="coba.json.LicenciaGuiaJson"%>
<%@page import="javax.portlet.PortletURL"%>
<%@page import="com.liferay.portal.util.PortalUtil"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %>

<portlet:defineObjects />

<%
	PortletURL urlListado = renderResponse.createRenderURL();
	urlListado.setParameter("jspPage","/views/solicitud/listado.jsp");

	List<Itinerario> listItinerario = ItinerarioLocalServiceUtil.findByFechaBaja(null);
	/*
	List<ItinerarioRecorrido> listItinerarioRecorrido = ItinerarioRecorridoLocalServiceUtil.getItinerarioRecorridos(0, 999999);
	List<Recorrido> listRecorrido = RecorridoLocalServiceUtil.getRecorridos(0, 999999);
	List<ConcurrenciaRecorrido> listConcurrenciaRecorrido = ConcurrenciaRecorridoLocalServiceUtil.getConcurrenciaRecorridos(0, 999999);
	List<Guia> listGuia = GuiaLocalServiceUtil.findByFechaBaja(null);
	List<LicenciaGuia> listLicenciaGuia = LicenciaGuiaLocalServiceUtil.findByFechaBaja(null);
	List<Solicitud> listSolicitud = SolicitudLocalServiceUtil.getSolicituds(0, 999999);
	*/

	String urlPrev = renderRequest.getParameter("redirectTo") != null ?
			renderRequest.getParameter("redirectTo") :
			(String) session.getAttribute("solicitud_calendario_redirectTo");

	session.setAttribute("solicitud_ver_redirectTo", PortalUtil.getCurrentURL(request));
	session.setAttribute("solicitud_alta_redirectTo", PortalUtil.getCurrentURL(request));
%>

<script>

	var urlVerItinerario = null
	var urlAltaSolicitud = null
	var urlVerSolicitud = null
	var urlCambiarItinerario = null
	var urlAjaxCalendario = null
	
	var arrItinerario = <%=ItinerarioJson.toJson(listItinerario)%>
	<%--
	var arrItinerarioRecorrido = <%=ItinerarioRecorridoJson.toJson(listItinerarioRecorrido)%>
	var arrRecorrido = <%=RecorridoJson.toJson(listRecorrido)%>
	var arrConcurrenciaRecorrido = <%=ConcurrenciaRecorridoJson.toJson(listConcurrenciaRecorrido)%>
	var arrGuia = <%=GuiaJson.toJson(listGuia)%>
	var arrLicenciaGuia = <%=LicenciaGuiaJson.toJson(listLicenciaGuia)%>
	var arrSolicitud = <%=SolicitudJson.toJson(listSolicitud)%>
	--%>
	
	function dibujarCalendario(mes) {		
		var html = '<table class="table table-bordered">'
		
		html += '<thead class="table-columns">'
		html += '<tr>'
		html += '<th>Lunes</th>'
		html += '<th>Martes</th>'
		html += '<th>Mi&eacute;rcoles</th>'
		html += '<th>Jueves</th>'
		html += '<th>Viernes</th>'
		html += '<th>S&aacute;bado</th>'
		html += '</tr>'
		html += '</thead>'
		
		html += '<tbody class="table-data">'
		
		html += getCalendarTableBodyHtml($('#modalidad').val(),
				$('#itinerario').val(),
				$('#anio').val(),
				$('#mes').val())
		
		html += '</tbody>'
		html += '</table>'
		
		$('#calendario').html(html)
	}

	function cantidadGuias(anio, mes, dia) {
		
		var arrLicenciaFiltered = arrLicenciaGuia.filter(function(licencia) {
					var fechaDesde = new Date(licencia.anioDesde, licencia.mesDesde - 1, licencia.diaDesde)
					var fechaHasta = new Date(licencia.anioHasta, licencia.mesHasta - 1, licencia.diaHasta + 1)
					var fecha = new Date(anio, mes, dia)
			
					return fecha >= fechaDesde && fecha < fechaHasta
				})
		
		var arrGuiaFiltered = arrGuia.filter(function(guia) {
					var fechaInicio = new Date(guia.anioInicio, guia.mesInicio - 1, guia.diaInicio)
					var fechaFin = guia.anioFin != undefined ?
							new Date(guia.anioFin, guia.mesFin - 1, guia.diaFin + 1) :
							null
					var fecha = new Date(anio, mes, dia)
					
					var arrLicenciasDeGuia = arrLicenciaFiltered.filter(function(licencia) {
								return licencia.guiaId == guia.id
							})

					return fecha >= fechaInicio && (fechaFin == null || fecha < fechaFin) &&
							guia.dias.indexOf(fecha.getDay()) > -1 && arrLicenciasDeGuia.length == 0
				})
		
		var arrSolicitudFiltered = arrSolicitud.filter(function(solicitud) {
					return solicitud.anioItinerario == anio && solicitud.mesItinerario - 1 == mes &&
							solicitud.diaItinerario == dia
				})
		console.info(arrSolicitudFiltered)		
		var cantMicros = arrSolicitudFiltered.reduce(function(cantidadMicros, solicitud) {
					return cantidadMicros + solicitud.cantidadMicros
				}, 0)
		console.info(cantMicros)
		return arrGuiaFiltered.length - cantMicros
	}
	
	function getCalendarTableBodyHtml(modalidad, itinerario, anio, mes) {
		var date = new Date(anio, mes, 1)
		var dayOfWeek = date.getDay()
		var filasMes = (new Date(anio, mes + 1, 0).getDate() + dayOfWeek) / 7
		
		var html = ''
		
		for (var i = 0; i < filasMes; i ++) {
			html += '<tr>'
			
			for (var j = 2; j < 8; j ++) {

				var dia = (i * 7) + j - dayOfWeek
				var mes1 = new Date(anio, mes, dia).getMonth()

				html += '<td class="table-data" style="width:16%;' + (dia > 0 && mes1 == mes && cantidadGuias(anio, mes, dia) < 1 ? 'background-color:#F2F5A9' : '') + '">'
				
				if (dia > 0 && mes1 == mes) {
					var diaDeLaSemana = new Date(anio, mes, dia).getDay()
					
					var arrItinerariosDia = arrItinerario.filter(function(it) {
								return it.modalidad == modalidad &&
										(itinerario == '' || it.id == itinerario) &&
										it.diasSemana.indexOf(diaDeLaSemana) > -1
							})
							
					html += '<div style="float:right">' + dia + '</div>'
					html += '<div>'
					
					arrItinerariosDia.forEach(function(itinerario) {

							/*
							 * ItinerarioRecorridoFiltered: ItinerarioRecorrido correspondientes al Itinerario
							 */
							var arrItinerarioRecorridoFiltered =
									arrItinerarioRecorrido.filter(function(itinerarioRecorrido) {
										return itinerarioRecorrido.itinerarioId == itinerario.id
									})
							
							/*
							 * IRxR: Producto cartesiano entre ItinerarioRecorridoFiltered y Recorrido
							 */
							var arrIRxR =
									arrItinerarioRecorridoFiltered.map(function(itinerarioRecorrido) {
										var recorrido =
												arrRecorrido.filter(function(recorrido) {
													return recorrido.id == itinerarioRecorrido.recorridoId
												})[0]
										
										return {itinerarioRecorrido: itinerarioRecorrido, recorrido: recorrido}
									})
							
							/*
							 * minCapacidad: capacidad del itinerario, dada por la minima de las capacidades
							 *               de los recorridos del itinerario
							 */
							var minCapacidad =
									arrIRxR.reduce(function(minCapacidad, irxr) {
										return irxr.recorrido.capacidad < minCapacidad ?
												irxr.recorrido.capacidad : minCapacidad
									}, 9999)
							
							/*
							 * IRxRxCR: Producto cartesiano entre ItinerarioRecorridoFiltered, Recorrido y ConcurrenciaRecorrido
							 */
							var arrIRxRxCR =
									arrIRxR.map(function(irxr) {
										var arrConcurrenciaRecorridoFiltered = 
												arrConcurrenciaRecorrido.filter(function(concurrenciaRecorrido) {
													/*
													if (concurrenciaRecorrido.anio == 2015)
													console.info(concurrenciaRecorrido.anio + ' ' +
															concurrenciaRecorrido.mes + ' ' +
															concurrenciaRecorrido.dia + ' ' +
															concurrenciaRecorrido.hora + ' ' +
															concurrenciaRecorrido.recorridoId + ' ' +
															concurrenciaRecorrido.cantidadPersonas)
													*/
													return concurrenciaRecorrido.anio == anio &&
															concurrenciaRecorrido.mes - 1 == mes &&
															concurrenciaRecorrido.dia == dia &&
															concurrenciaRecorrido.hora == irxr.itinerarioRecorrido.hora &&
															concurrenciaRecorrido.recorridoId == irxr.recorrido.id
												})
										
										return {itinerarioRecorrido: irxr.itinerarioRecorrido,
												recorrido: irxr.recorrido,
												concurrenciaRecorrido: arrConcurrenciaRecorridoFiltered.length > 0 ?
														arrConcurrenciaRecorridoFiltered[0] :
														{cantidadPersonas: 0}}
									})
							
							/*
							 * disponibilidadItinerario: la minima de las disponibilidades de los recorridos q componen el itinerario
							 */
							var disponibilidadItinerario =
									arrIRxRxCR.reduce(function(disponibilidadItinerario, irxrxcr) {
										var disponibilidadRecorrido = irxrxcr.recorrido.capacidad - irxrxcr.concurrenciaRecorrido.cantidadPersonas
										//if (dia == 9)
										//	console.info(irxrxcr)
										return disponibilidadRecorrido < disponibilidadItinerario ?
												disponibilidadRecorrido : disponibilidadItinerario
									}, 9999)

							
							html += '<a style="color:' + (disponibilidadItinerario < 1 || new Date(anio, mes, dia) < new Date() ? 'black' : '#00DD00') + '" href="#" onclick="return verItinerario(\'' + itinerario.id + '\', \'' + anio + '\', \'' + mes + '\', \'' + dia + '\')">' +
									itinerario.nombre + '</a> ' + /*cantidadGuias(anio, mes, dia) +*/
									/*disponibilidadItinerario +*/ '<br />'
							/*
							arrIRxR.forEach(function(irxr) {
									if (irxr.itinerarioRecorrido.itinerarioId == itinerario.id)
										html += irxr.recorrido.nombre + '<br />'
								})
							*/

						})				
						
						html += '</div>'	
				}
				
				html += '</td>'
			}
			
			html += '</tr>'
		}

		return html
	}
	
	function seleccionarModalidad() {
		if ($('#modalidad').val() != '') {
			var options = arrItinerario.filter(function(itinerario) {
					return itinerario.modalidad == $('#modalidad').val()
				}).reduce(function(options, itinerario) {
					return options + '<option value="' + itinerario.id + '">' + itinerario.nombre + '</option>'
				}, '<option value="">Todos</option>')
			
			$('#itinerario').html(options)
			$('#itinerario').val('')
			$('#itinerarioDiv').show()
			seleccionarItinerario()
		}
		else {
			$('#itinerarioDiv').hide()
			$('#anioDiv').hide()
			$('#mesDiv').hide()
			$('#calendario2').html('')
		}
	}
	
	function seleccionarItinerario() {
		var arrAnio = ['2015', '2016', '2017', '2018', '2019', '2020']

		var html = arrAnio.reduce(function(html, anio) {
			return html + '<option value="' + anio + '">' + anio + '</option>'
		}, '<option value=""></option>')

		$('#anio').html(html)
		$('#anio').val('')
		$('#anioDiv').show()
		$('#mesDiv').hide()
		$('#calendario2').html('')
	}
	
	function seleccionarAnio() {
		if ($('#anio').val() != '') {
			var arrMes = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio',
					'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']

			var html = arrMes.reduce(function(html, mes, index) {
						return html + '<option value="' + index + '">' + mes + '</option>'
					}, '<option value=""></option>')

			$('#mes').html(html)
			$('#mes').val('')
			$('#mesDiv').show()
			$('#calendario2').html('')
		}
		else {
			$('#mesDiv').hide()
			$('#calendario2').html('')
		}
	}
	
	function seleccionarMes() {
		if ('' == $('#mes').val())
			$('#calendario2').html('')
		else
			ajaxCalendario($('#modalidad').val(), $('#itinerario').val(), $('#anio').val(), $('#mes').val())
			//dibujarCalendario(parseInt($(this).val(), 10))
	}
	
	function ajaxCalendario(modalidad, itinerarioId, anio, mes) {
		$('#calendario2').html('')
		
		urlAjaxCalendario.setParameter('modalidad', modalidad)
		urlAjaxCalendario.setParameter('itinerarioId', itinerarioId)
		urlAjaxCalendario.setParameter('anio', anio)
		urlAjaxCalendario.setParameter('mes', mes)
		urlAjaxCalendario.setParameter('t', Date.now())
		
		jQuery.ajax({
			type: 'GET',
			url: urlAjaxCalendario,
			success: function(data){
				$('#calendario2').html(data)
				location.hash = "#headerDiv";
			}
		});
	}
	
	function verItinerario(itinerarioId, anio, mes, dia) {

		urlVerItinerario.setParameter('itinerarioId', itinerarioId)
		urlVerItinerario.setParameter('anio', anio)
		urlVerItinerario.setParameter('mes', mes)
		urlVerItinerario.setParameter('dia', dia)
		<%
			if (renderRequest.getParameter("id") != null &&
					!renderRequest.getParameter("id").trim().equals("")) {
		%>
			urlVerItinerario.setParameter('solicitudId', <%=renderRequest.getParameter("id")%>)
		<% } %>
		
		abrirPopup('itinerarioPopup', 'Detalle itinerario',
				urlVerItinerario)
		
		return false;
	}
	
	AUI().ready('liferay-portlet-url', function(A) {
		urlVerItinerario = crearUrl('/views/solicitud/popup/verItinerario.jsp', 'popup')
		urlAltaSolicitud = crearUrl('/views/solicitud/alta.jsp', '')
		urlVerSolicitud = crearUrl('/views/solicitud/ver.jsp', '')
		urlCambiarItinerario = crearUrl('/views/solicitud/alta.jsp', '')
		urlAjaxCalendario = crearUrl('/views/json/prueba.jsp', 'exclusive')
		
		$('#modalidad').change(seleccionarModalidad)
		$('#itinerario').change(seleccionarItinerario)
		$('#anio').change(seleccionarAnio)
		$('#mes').change(seleccionarMes)
		
		<% if (session.getAttribute("calendarioMes") != null) { %>
			$('#modalidad').val('<%=(String)session.getAttribute("calendarioModalidad")%>')
			seleccionarModalidad()
			$('#itinerario').val('<%=(String)session.getAttribute("calendarioItinerario")%>')
			seleccionarItinerario()
			$('#anio').val('<%=(Integer)session.getAttribute("calendarioAnio")%>')
			seleccionarAnio()
			$('#mes').val('<%=(Integer)session.getAttribute("calendarioMes")%>')
			seleccionarMes()
		<% } %>
	});
	
	function crearUrl(path, type) {
		var url = new Liferay.PortletURL.createRenderURL();
		
		url.setParameter('mvcPath', path);
		url.setPortletId('agenda_WAR_agendaportlet');
		
		if (type == 'popup')
			url.setWindowState('pop_up');
		else if (type == 'exclusive')
			url.setWindowState('exclusive');

		return url;
	};
	
	function abrirPopup(id, title, uri) {
		
		Liferay.Util.openWindow({
			dialog: {
				centered: true,
				after: {
					render: function(event) {
						this.set('y', this.get('y') + 50);
						$(".modal").show();
					}
				},
				width: 1000,
				height: 1000
			},
			id: id,
			title: title,
			uri: uri.toString()
		});
	};
	
	Liferay.provide(
			window,
			'altaSolicitud',
			function(itinerarioId, anio, mes, dia) {
				Liferay.Util.Window
					.getById('itinerarioPopup')
					.destroy();

				urlAltaSolicitud.setParameter('redirectTo', '<%=PortalUtil.getCurrentURL(request)%>');
				urlAltaSolicitud.setParameter('itinerarioId', itinerarioId);
				urlAltaSolicitud.setParameter('itinerarioAnio', anio);
				urlAltaSolicitud.setParameter('itinerarioMes', mes);
				urlAltaSolicitud.setParameter('itinerarioDia', dia);
				
				location.href = urlAltaSolicitud.toString()
			},
			['liferay-util-window']
		);


	Liferay.provide(
			window,
			'cambiarItinerario',
			function(itinerarioId, anio, mes, dia, solicitudId) {
				Liferay.Util.Window
					.getById('itinerarioPopup')
					.destroy();

				urlCambiarItinerario.setParameter('redirectTo', '<%=PortalUtil.getCurrentURL(request)%>');
				urlCambiarItinerario.setParameter('itinerarioId', itinerarioId);
				urlCambiarItinerario.setParameter('itinerarioAnio', anio);
				urlCambiarItinerario.setParameter('itinerarioMes', mes);
				urlCambiarItinerario.setParameter('itinerarioDia', dia);
				urlCambiarItinerario.setParameter('id', solicitudId);
				
				location.href = urlCambiarItinerario.toString()
			},
			['liferay-util-window']
		);

	Liferay.provide(
			window,
			'verSolicitud',
			function(id) {
				urlVerSolicitud.setParameter('redirectTo', '<%=PortalUtil.getCurrentURL(request)%>');
				urlVerSolicitud.setParameter('id', id);

				location.href = urlVerSolicitud.toString()
			},
			['liferay-util-window']
		);

	
	$(function() {
		location.hash = "#headerDiv";
	})
</script>


<portlet:renderURL var="ver">
    <portlet:param name="jspPage" value="/views/solicitud/ver.jsp" />
</portlet:renderURL>

<portlet:actionURL var="altaSolicitudItinerario" name="altaSolicitudItinerario">
</portlet:actionURL>

<liferay-ui:success key="success" message="La solicitud ha sido registrada." />
<liferay-ui:success key="eliminado" message="La solicitud ha sido eliminada." />

<div>

	<div id="headerDiv" class="taglib-header">
		<span class="header-back-to">
			<a class="icon-circle-arrow-left previous-level" href="<%=urlPrev%>" title="Atr&aacute;s">
				<span class="helper-hidden-accessible"> Atr&aacute;s </span>
			</a>
		</span>
		<h3 class="header-title"><span> Calendario </span></h3>
	</div>

	<div style="overflow:auto">
		<label style="width:10%; float:left; line-height:2em" for="modalidad">Modalidad</label>

		<select style="float:left" required class="form-control" name="<portlet:namespace />modalidad" id="modalidad">
			<option></option>
			<option>A</option>
			<option>B</option>
			<option>D</option>
		</select>

		<div style="width:10%; float:left">&nbsp;</div>

		<div id="anioDiv" style="display:none">
			<label style="width:5%; float:left; line-height:2em" for="anio">A&ntilde;o</label>
			<select style="float:left" required class="form-control" name="<portlet:namespace />anio" id="anio"></select>
		</div>
	</div>
	
	<div style="overflow:auto">
		<div id="itinerarioDiv" style="display:none">
			<label style="width:10%; float:left; line-height:2em" for="itinerario">Itinerario</label>
			<select style="float:left" required class="form-control" name="<portlet:namespace />itinerario" id="itinerario"></select>
		</div>

		<div style="width:10%; float:left">&nbsp;</div>
		
		<div id="mesDiv" style="display:none">
			<label style="width:5%; float:left; line-height:2em" for="mes">Mes</label>
			<select style="float:left" required class="form-control" name="<portlet:namespace />mes" id="mes"></select>
		</div>
	</div>

	<div id="calendario2"></div>
	<div id="calendario"></div>
	
</div>
